'use strict';

module.exports = ({ mongoose }) => {
  const { Schema, ObjectId } = mongoose;
  const fieldSchema = new Schema(
    {
      name: { type: String, required: true }, // 字段名称（姓名、手机号、身份证、图片等等）
      type: { type: String }, // 字段类型
      required: { type: Boolean }, // 是否必填
    },
    { _id: false }
  );
  const activitySchema = new Schema(
    {
      title: { type: String, required: true }, // 活动标题
      description: { type: String }, // 活动描述
      photos: { type: [ ObjectId ], ref: 'file', default: undefined }, // 活动图片
      type: { type: String, enum: [ 'once', 'daily' ] }, // 打卡类型（单次打卡或每日打卡）
      creator: { type: ObjectId, ref: 'user', index: true }, // 创建人
      startDate: { type: String }, // 开始日期
      endDate: { type: String }, // 结束日期
      startTime: { type: String }, // 开始时间
      endTime: { type: String }, // 结束时间
      maxCounts: { type: String, default: 1 }, // 最多打卡次数
      location: { type: [ Number ], index: { type: '2dsphere', sparse: true }, default: undefined }, // 地理位置
      address: { type: String }, // 地点名称
      distance: { type: Number }, // 打卡范围
      fields: { type: [ fieldSchema ], default: undefined }, // 打卡字段
      allowModify: { type: Boolean, default: false }, // 是否允许修改/删除打卡记录
      access: { type: String, enum: [ 'private', 'public' ], default: 'public' }, // 打卡记录查看权限（发起人可见、所有人可见）
      sharePhoto: { type: ObjectId, ref: 'file' }, // 自定义分享图
      turnout: { type: Number, default: 0 }, // 参与人数
      counts: { type: Number, default: 0 }, // 参与人次
      priority: { type: Number, default: Date.now }, // 优先级
      awesome: { type: Boolean }, // 是否精选
      status: { type: Number, default: 0 }, // 审核状态：0 待审核 -1 审核失败 1 审核成功
    },
    {
      timestamps: true,
    }
  );
  return mongoose.model('activity', activitySchema);
};
